package utils

import "reflect"

// 元素的真正类型，如果是ptr ,则返回ptr指向的类型
func TypeRealKind(t reflect.Type) reflect.Kind {
	if t.Kind() == reflect.Ptr {
		return t.Elem().Kind()
	} else {
		return t.Kind()
	}
}

func GetRealValue(item any) reflect.Value {
	val := reflect.ValueOf(item)
	if val.Kind() == reflect.Ptr {
		return val.Elem()
	} else {
		return val
	}
}

// 返回函数的名称
func GetFuncName(fn any) string {
	return reflect.TypeOf(fn).Name()
}

// 返回函数及参数组合的名称，以"_"连接
func GetFuncFullName(fn any) string {
	var name string
	fnType := reflect.TypeOf(fn)
	name = fnType.Name()
	for i := 0; i < fnType.NumIn(); i++ {
		name += "_" + fnType.In(i).Name()
	}
	return name
}
